home *** CD-ROM | disk | FTP | other *** search
/ Aminet 22 / Aminet 22 (1997)(GTI - Schatztruhe)[!][Dec 1997].iso / Aminet / dev / e / amigae33a.lha / E_v3.3a / Src.lha / Src / Gfx / TextureMapping / tmaptest.e < prev   
Text File  |  1980-05-10  |  4KB  |  122 lines

  1. -> tmap experiment
  2.  
  3. OPT OSVERSION=39, LARGE, PREPROCESS
  4.  
  5. CONST CWIDTH=320    -> in units of 64 seems best...
  6. CONST CHEIGHT=240,SCOFF=8
  7. CONST SCHEIGHT=SCOFF*2+CHEIGHT,SCDEPTH=8
  8. CONST BUFS=CWIDTH*CHEIGHT
  9.  
  10. MODULE '*geom', '*c2p_cpu3blit1', '*texturemapper', '*screenmodereq_db',
  11.        'tools/exceptions', 'tools/scrbuffer',
  12.        'intuition/screens', 'intuition/intuition',
  13.        'graphics/rastport', 'graphics/gfx' 
  14.  
  15. PROC addc(p:PTR TO point,c,l,fishy)
  16.   DEF a,b
  17.   a,b:=project3d(c,p,CWIDTH/2,CHEIGHT/2,fishy)
  18.   ListAdd(l,[a,b])
  19. ENDPROC
  20.  
  21. PROC render(cbuf,c:PTR TO opoint,fishy,pic)
  22.   DEF l[8]:LIST
  23.   clearmem(cbuf,CWIDTH*CHEIGHT,-1)
  24.   addc([100,100,0]:point,c,l,fishy)
  25.   addc([-100,100,0]:point,c,l,fishy)
  26.   addc([-100,-100,0]:point,c,l,fishy)
  27.   addc([100,-100,0]:point,c,l,fishy)
  28.   tmap(l,cbuf,CWIDTH,CHEIGHT,pic,64,64)
  29.   SetList(l,0)
  30.   addc([-100,-100,0]:point,c,l,fishy)
  31.   addc([100,-100,0]:point,c,l,fishy)
  32.   addc([100,-100,-200]:point,c,l,fishy)
  33.   addc([-100,-100,-200]:point,c,l,fishy)
  34.   tmap(l,cbuf,CWIDTH,CHEIGHT,pic,64,64)
  35.   SetList(l,0)
  36.   addc([100,-100,0]:point,c,l,fishy)
  37.   addc([100,100,0]:point,c,l,fishy)
  38.   addc([100,100,-200]:point,c,l,fishy)
  39.   addc([100,-100,-200]:point,c,l,fishy)
  40.   tmap(l,cbuf,CWIDTH,CHEIGHT,pic,64,64)
  41. ENDPROC
  42.  
  43. tmaplab: INCBIN 'car64x64x8.iff.cmchunky'
  44.  
  45. PROC clearmem(mem,size,pat)
  46.   DEF e:REG,a:REG,b:REG,c:REG,d:REG
  47.   e:=size/16-1
  48.   a:=b:=c:=d:=pat
  49.   MOVE.L mem,A0
  50.   ADD.L size,A0
  51. clloop:
  52.   MOVEM.L a/b/c/d,-(A0)
  53.   DBRA e,clloop
  54. ENDPROC
  55.  
  56. PROC main() HANDLE
  57.   DEF dbs,scr=NIL:PTR TO screen,bm:PTR TO bitmap,win=NIL:PTR TO window,cam:PTR TO opoint,
  58.       cbuf,imsg:PTR TO intuimessage,key,frames=0,dframes,fsec,ssec,smic,esec,emic,fishy=60,
  59.       a,pic,tpic[17000]:ARRAY OF CHAR
  60.   cam:=[200,-200,150,-45,45,10]:opoint
  61.   pic:={tmaplab}
  62.   IF (dbs:=openreqscreen(CWIDTH,SCHEIGHT,SCDEPTH,'bla'))=NIL THEN Raise() -> OpenScreen
  63.   scr:=sb_GetScreen(dbs)
  64.   IF (win:=OpenW(0,0,CWIDTH-1,SCHEIGHT-1,
  65.     IDCMP_MOUSEBUTTONS OR IDCMP_VANILLAKEY,
  66.     WFLG_BORDERLESS OR WFLG_SIMPLE_REFRESH OR WFLG_BACKDROP OR WFLG_ACTIVATE OR WFLG_RMBTRAP,
  67.     '',scr,15,NIL))=NIL THEN Raise("WIN")
  68.   NEW cbuf[BUFS]
  69.   FOR a:=0 TO 255 DO SetColour(scr,a,pic[]++,pic[]++,pic[]++)
  70.   FOR a:=0 TO 64 DO CopyMem(a*64+pic,a*256+tpic,64)
  71.   SetRast(scr.rastport,255)
  72.   bm:=sb_NextBuffer(dbs)
  73.   SetRast(scr.rastport,255)
  74.   c2p_setup(gfxbase,CWIDTH,CHEIGHT,SCOFF,0 /* dummy */,NewM(CWIDTH*CHEIGHT,2))
  75.   CurrentTime({ssec},{smic})
  76.   REPEAT
  77.     render(cbuf,cam,fishy,tpic)
  78.     Colour(0,255)
  79.     ->TextF(0,SCHEIGHT-5,'x=\d y=\d z=\d turn=\d up=\d tilt=\d, wide=\d',cam.x,cam.y,cam.z,cam.turn,cam.up,cam.tilt,fishy)
  80.     bm:=sb_NextBuffer(dbs)
  81.     c2p(cbuf,bm.planes)
  82.     frames++
  83.     IF imsg:=GetMsg(win.userport)
  84.       IF imsg.class=IDCMP_VANILLAKEY
  85.         key:=imsg.code
  86.         SELECT key
  87.           CASE "n"; cam.turn:=cam.turn+10        -> turnleft
  88.           CASE "m"; cam.turn:=cam.turn-10        -> turnright
  89.           CASE "d"; cam.up:=cam.up-10            -> lookdown
  90.           CASE "c"; cam.up:=cam.up+10            -> lookup
  91.           CASE "v"; cam.tilt:=cam.tilt-10        -> bankleft
  92.           CASE "b"; cam.tilt:=cam.tilt+10        -> bankright
  93.           CASE "s"; cam.z:=cam.z+10            -> down
  94.           CASE "x"; cam.z:=cam.z-10            -> up
  95.           CASE "a"; cam.y:=cam.y+10            -> yforward
  96.           CASE "z"; cam.y:=cam.y-10            -> ybackward
  97.           CASE "w"; cam.x:=cam.x+10            -> xright
  98.           CASE "e"; cam.x:=cam.x-10            -> xleft
  99.           CASE "r"; fishy:=fishy+10            -> zoom
  100.           CASE "t"; IF fishy>15 THEN fishy:=fishy-10    -> wide angle
  101.           ->   "q" quits
  102.         ENDSELECT
  103.       ELSEIF imsg.class=IDCMP_MOUSEBUTTONS
  104.       ENDIF
  105.       ReplyMsg(imsg)
  106.     ENDIF
  107.   UNTIL key="q"
  108.   CurrentTime({esec},{emic})
  109.   dframes:=Mul(esec-ssec,100)+Div(emic-smic,10000)
  110.   fsec:=Div(Mul(frames,10000),dframes)
  111.   IF frames THEN WriteF('calculated \d frames in \d.\z\d[2] seconds, giving \d.\z\d[2] f/s\n',frames,Div(dframes,100),Mod(dframes,100),Div(fsec,100),Mod(fsec,100))
  112. EXCEPT DO
  113.   IF win THEN CloseWindow(win)
  114.   closereqscreen(dbs)
  115.   SELECT exception
  116.     CASE "SCR"; WriteF('no screen!\n')
  117.     CASE "REQ"; WriteF('Error: Could not allocate ASL request\n')
  118.     CASE "ASL"; WriteF('Error: Could not open ASL library\n')
  119.   ENDSELECT
  120.   report_exception()
  121. ENDPROC
  122.